iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0

SRP
單一類別的複雜度降低,因為要實現的職責都很清晰明確的定義,這將大幅提升可讀性與可維護性。
如果有做好 SRP ,那修改只會對同一個介面或類別有影響,這對擴展性和維護性都有很大的幫助。

class AnimalDB:
    def get_animal(self, id):
        print("抓到動物資料")
        return

    def save(self, name, id):
        print("成功儲存動物資料")
        return


class Animal:
    def __init__(self, name, id):
        self.name = name
        self.id = id

    def get_name(self):
        return print(self.name)

    def get_data(self):
        return AnimalDB().get_animal(self.id)
    
    def save(self):
       return AnimalDB().save(self.name, self.id)

dog = Animal("dog", 1)
dog.get_name()
dog.get_data()
dog.save()

OCP
開放 擴充 的可能性
封閉 修改 的可能性

降低修改風險。
OCP跟DIP都是討論抽象概念,可以利用DIP方法來達成降低耦合進而遵循OCP,如果利用多型方法來實現,則需要遵守LSP,可以保證子類別的可替換性,來達到無需修改就可以擴展

from abc import ABCMeta, abstractmethod
from cmath import pi


class Calculate(metaclass=ABCMeta):
    @abstractmethod
    def get_area(self):
        pass


class Square(Calculate):
    def __init__(self, h, w):
        self.h = h
        self.w = w

    def get_area(self):
        print(self.h * self.w)


class Circle(Calculate):
    def __init__(self, r):
        self.r = r

    def get_area(self):
        print(self.r * self.r * pi)


square = Square(3,3)
square.get_area()

circle = Circle(2)
circle.get_area()

LSP
當子類別替換替換掉父類別時,其功能不受影響

子類別處理不同的業務邏輯,參數定義使用父類別,實際上傳遞的是子類別,這樣就能同份定義,執行不同的業務邏輯。

class Father:
    def apple(self):
        return 20


class Son:
    def apple(self):
        return 40


class Customer(Father):
    def buy_apple(self):
	    return self.apple()


customers = Customer()
print(customers.buy_apple())
        

上一篇
Day27 Python 三大特性Demo
下一篇
Day29 SOLID原則 & property 特性 Demo
系列文
Python之虛擬貨幣API實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言